package com.zsj.heap;

import java.util.Arrays;
import java.util.PriorityQueue;

/**
 * @Author zsj
 * @Version 1.0
 * @Date 2024/4/12 12:29
 * @Description 703. 数据流中的第 K 大元素
 */
public class KthLargest {

    private MinHeap minHeap;

    /**
     * 使用整数 k 和整数流 nums 初始化对象。
     *
     * @param k    整数 < 10^4
     * @param nums 数组
     */
    public KthLargest(int k, int[] nums) {
        minHeap = new MinHeap(k);
        for (int num : nums) {
            add(num);
        }
    }

    /**
     * 将 val 插入数据流 nums 后，返回当前数据流中第 k 大的元素
     *
     * @param val 插入数据
     * @return k大元素
     */
    public int add(int val) {
        if (!minHeap.isFull()) minHeap.offer(val);
        else if (val > minHeap.peek()) {
            minHeap.replace(val);
        }
        return minHeap.arr[0];
    }

    public static void main(String[] args) {
        KthLargest kthLargest = new KthLargest(3, new int[]{4, 5, 8, 2});
        System.out.println(Arrays.toString(kthLargest.minHeap.arr));
        System.out.println(kthLargest.add(3));
        System.out.println(kthLargest.add(5));
        System.out.println(kthLargest.add(10));
        System.out.println(kthLargest.add(9));
        System.out.println(kthLargest.add(4));
        System.out.println(Arrays.toString(kthLargest.minHeap.arr));
    }
}
